import axios from 'axios';

// 创建axios实例
// axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';
//
const axiosInstance = axios.create({
    baseURL: "http://dev.hndykyy.com:5800", //开发环境

    timeout: 30000 // 请求超时时间
});

//请求拦截
axiosInstance.interceptors.request.use(
    config => {
        //如果有一个接口需要认证才可以访问，就在这边统一设置
        // 根据条件加入token-安全携带
        if (true) { // 需自定义
            // 让每个请求携带token

            // let apiObj = config.url;
            // config.url = apiObj.url;

            // if (apiObj.needToken) {
            //     let userInfo = storage.get('userInfo');
            //     if (userInfo && userInfo.token) {
            //         config.headers['Authorization'] = 'Bearer ' + userInfo.token.token;
            //     }

            // }

        }
        return config;
    },
    error => {
        // 请求错误处理
        Promise.reject(error);
    }
)


//响应拦截
axiosInstance.interceptors.response.use(
    response => {
        // 统一处理状态
        if (response.status === 200) {

            if (response.data.status === 401) {
            }

        } else {
            Toast({
                message: '网络异常，请稍后再试！',
            });
        }
        return response.data;
    },
    // 处理错误
    error => {
        if (error && error.response) {
            switch (error.response.status) {
                case 400:
                    error.message = '错误请求';
                    break;
                case 401:
                    error.message = '未授权，请重新登录';
                    break;
                case 403:
                    error.message = '拒绝访问';
                    break;
                case 404:
                    error.message = '请求错误,未找到该资源';
                    break;
                case 405:
                    error.message = '请求方法未允许';
                    break;
                case 408:
                    error.message = '请求超时';
                    break;
                case 500:
                    error.message = '服务器端出错';
                    break;
                case 501:
                    error.message = '网络未实现';
                    break;
                case 502:
                    error.message = '网络错误';
                    break;
                case 503:
                    error.message = '服务不可用';
                    break;
                case 504:
                    error.message = '网络超时';
                    break;
                case 505:
                    error.message = 'http版本不支持该请求';
                    break;
                default:
                    error.message = `未知错误${error.response.status}`;
            }
        } else {
            error.message = "连接到服务器失败";
        }
        return Promise.reject(error);
    }
);





const http = {

    isConsolePrintLog: false,

    get: function (api, params, successCallback, errorCallback) {

        if (this.isConsolePrintLog) {
            console.log("请求开始：" + api);
        }

        axiosInstance({
            url: api,
            method: 'get',
            params: params

        }).then(response => {

            if (this.isConsolePrintLog) {
                console.log("请求成功：" + response);
            }

            successCallback(response);

        }).catch(error => {

            if (this.isConsolePrintLog) {
                console.log("请求失败：" + error);
            }
            errorCallback(error);

        });

    },

    post: function (api, params, successCallback, errorCallback) {

        if (this.isConsolePrintLog) {
            console.log("请求开始：" + api.url);
        }

        axiosInstance({
            url: api,
            method: 'post',
            data: params
        }).then(response => {

            if (this.isConsolePrintLog) {
                console.log("请求成功：" + response);
            }
            successCallback(response);

        }).catch(error => {

            if (this.isConsolePrintLog) {
                console.log("请求失败：" + error);
            }
            errorCallback(error);

        });

    },

    syncGet : function (api, params){

        if (this.isConsolePrintLog) {
            console.log("请求开始：" + api.url);
        }

        return axiosInstance({
            url: api,
            method: 'get',
            params: params
        })

    },

    syncPost : function (api, params){

        if (this.isConsolePrintLog) {
            console.log("请求开始：" + api.url);
        }

        return axiosInstance({
            url: api,
            method: 'post',
            data: params
        })

    },

    // uploadImgToAli: function (dataBase64) {

    //     return new Promise((resolve, reject) => {
    //         // dataBase64 = 'data:image/png;base64,' + dataBase64;
    //         let OSS = require('ali-oss');

    //         let time = new Date().Format('yyyy-MM-dd hh:mm:dd-SSSS');
    //         let imageName = time + '-' + (Math.random() * 10) + (Math.random() * 10);

    //         let client = new OSS({
    //             // region以杭州为例（oss-cn-hangzhou），其他region按实际情况填写。
    //             region: "oss-cn-beijing",
    //             // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录RAM控制台创建RAM账号。
    //             accessKeyId: "LTAI4GK7pL13jMjn8kmfWA6w",
    //             accessKeySecret: "rpY5NR0oIEpGBK3m0LazipU7mzJykq",
    //             bucket: "hndykyy"
    //         });

    //         async function putObject() {
    //             try {

    //                 let arr = dataBase64.split(','), mime = arr[0].match(/:(.*?);/)[1],
    //                     bStr = atob(arr[1]), n = bStr.length, u8arr = new Uint8Array(n);
    //                 while (n--) {
    //                     u8arr[n] = bStr.charCodeAt(n);
    //                 }
    //                 let b = new Blob([u8arr], { type: mime });

    //                 // object-key可以自定义为文件名（例如file.txt）或目录（例如abc/test/file.txt）的形式，实现将文件上传至当前Bucket或Bucket下的指定目录。
    //                 let result = await client.put(imageName, b);
    //                 resolve(result);
    //             } catch (e) {
    //                 reject(e);
    //             }
    //         }

    //         return putObject();
    //     });

    // }

};


export default http;
